/***************************************************************************
 创建者: 华磊
 开始时间: 2019.11.27
 copyright: (C) 华友高科
 修改说明:
 ***************************************************************************
 *  @file .h
 *  功能:
 * 迭代法计算零点。
 *
 *                                                                         *
 ***************************************************************************/
#ifndef ZEROCALCULATE_H
#define ZEROCALCULATE_H
#include "GeneralDefine.h"

class CoordinateManager;
struct RobotCommonParameter;

class ZeroCalculate
{
public:
    ZeroCalculate(CoordinateManager* coordinateManagerIn,RobotCommonParameter * roboParameterIn);

public:
    int calculateZeroOffset(std::vector<PointPro> pointList,std::vector<double> &zeroOffsetOut
                            ,double &maxErrorOut);

private:
    int calculateZeroOffset_oneAxis(int axisId,std::vector<PointPro> pointList,std::vector<double> zeroOffsetIn,
                                    std::vector<double> &zeroOffsetOut,double &maxErrorOut);
    int calculateZeroOffset_allAxis(std::vector<PointPro> pointList, std::vector<double> zeroOffsetIn,
                                    std::vector<double> &zeroOffsetOut, double &maxErrorOut);
    int calculateMaxError(std::vector<PointPro> pointList, std::vector<double> zeroOffsetIn,double &maxErrorOut);

private:
    CoordinateManager* coordinateManager;
    RobotCommonParameter * roboParameter;
    double searchRange;//零点偏差搜索范围。
    int iterationsForZero;//迭代次数

};

#endif // ZEROCALCULATE_H
